package com.taotao.manage.service;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.taotao.manage.mapper.ContentCategoryMapper;
import com.taotao.manage.pojo.ContentCategory;

@Service
public class ContentCategoryService extends BaseService<ContentCategory> {
    
    @Autowired
    private ContentCategoryMapper contentCategoryMapper;
    
    /**
     * 新增一个子类节点
     * @param parentId
     * @param name
     * @return
     */
    public ContentCategory saveAndReturn(Long parentId, String name) {
        // 首先保存新增的子节点
        ContentCategory record = new ContentCategory();
        record.setIsParent(false);
        record.setName(name);
        record.setParentId(parentId);
        // 排序号
        record.setSortOrder(1);
        // 状态：1正常，2删除
        record.setStatus(1);
        boolean flag = super.save(record );
        
        if (flag){
            // 新增成功,判断父节点是否已经是父节点，否则就修改状态
             ContentCategory contentCategory = super.queryById(parentId);
            if (!contentCategory.getIsParent()){
                // 不是父节点，就更新
                ContentCategory parent = new ContentCategory();
                parent.setId(parentId);
                parent.setIsParent(true);
                super.update(parent);
            }
        }
        return record;
    }

    /**
     * 删除节点:
     * 1、删除当前 节点
     * 2、删除当前节点下的所有节点
     * 3、如果父节点没有其他节点了，修改父节点的状态（不是父节点）
     * @param parentId
     * @param id
     * @return
     */
    public boolean deleteContentCategory(Long parentId, Long id) {
        // 删除当前节点下的所有节点
        ContentCategory deleteNode = super.queryById(id);
        // 操作成功的标志
        boolean flag = true;
        if (deleteNode.getIsParent()){
            // 要删除的所有节点id
            List<Object> ids = new ArrayList<Object>();
            deleteChildrenNode(deleteNode.getId(), ids);
            // 执行删除所有的子节点
            flag = super.deleteByIds(ContentCategory.class, ids);
        }
        if (flag){
            // 说明删除所有的子节点都成功
            // 开始删除当前节点
           flag = super.deleteById(id);
        }
        if (flag){
            // 说明删除当前节点成功
            // 开始更新父节点了
            ContentCategory record = new ContentCategory();
            record.setParentId(parentId);
            List<ContentCategory> list = super.queryListByWhere(record );
            if (list.size() == 0){
                // 该父节点没有子节点了，就更改状态
                record = new ContentCategory();
                record.setId(parentId);
                record.setIsParent(false);
                flag = super.update(record);
            }
        }
        if (flag){
            // 所有的操作都成功,返回true
            return true;
        }
        return false;
    }

    // 获取当前节点，下所有节点的id，准备删除
    private void deleteChildrenNode(Long id, List<Object> ids) {
        ContentCategory record = new ContentCategory();
        record.setParentId(id);
        List<ContentCategory> list = super.queryListByWhere(record );
        // 遍历当前节点的所有子节点
        for (ContentCategory contentCategory : list) {
            // 判断子节点是否还是父节点
            if (contentCategory.getIsParent()){
                // 还是父节点，递归调用
                deleteChildrenNode(contentCategory.getId(), ids);
            }
            // 将所有的子节点id，放入其中
            ids.add(contentCategory.getId());
        }
        
    }
}
